package com.lealone.ltemr;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
 * 引进的包都是Java自带的jar包
 * 秘钥相关包
 * base64 编解码
 * 这里只用到了编码
 */
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.util.HashMap;
import java.util.Map;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class CreateSecrteKey {
  
    public static final String KEY_ALGORITHM = "RSA";
    //public static final String SIGNATURE_ALGORITHM = "MD5withRSA";
    private static final String PUBLIC_KEY = "RSAPublicKey";
    private static final String PRIVATE_KEY = "www.guilin.zct.cn";
    static Map<String, Object> keyMap;
    static{
        try {
            keyMap = initKey();
        } catch (Exception e) {
            
        }
    }
    //获得公钥
    public static String getPublicKey(Map<String, Object> keyMap) throws Exception {
        //获得map中的公钥对象 转为key对象
        Key key = (Key) keyMap.get(PUBLIC_KEY);
        //byte[] publicKey = key.getEncoded();
        //编码返回字符串
        return encryptBASE64(key.getEncoded());
    }

    //获得私钥
    public static String getPrivateKey(Map<String, Object> keyMap) throws Exception {
        //获得map中的私钥对象 转为key对象
        Key key = (Key) keyMap.get(PRIVATE_KEY);
        //byte[] privateKey = key.getEncoded();
        //编码返回字符串
        return encryptBASE64(key.getEncoded());
    }

    //解码返回byte
    public static byte[] decryptBASE64(String key) throws Exception {
        return (new BASE64Decoder()).decodeBuffer(key);
    }

    //编码返回字符串
    public static String encryptBASE64(byte[] key) throws Exception {
        return (new BASE64Encoder()).encodeBuffer(key);
    }
    
    public static String ecode(String str) throws Exception{
        return encryptBASE64(str.getBytes());
    }
    public static String decode(String str) throws Exception{
        return new String(CreateSecrteKey.decryptBASE64(str)); 
    }
    
    //map对象中存放公私钥
    public static Map<String, Object> initKey() throws Exception {
        //获得对象 KeyPairGenerator 参数 RSA 1024个字节
        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
        keyPairGen.initialize(1024);
        //通过对象 KeyPairGenerator 获取对象KeyPair
        KeyPair keyPair = keyPairGen.generateKeyPair();
        
        //通过对象 KeyPair 获取RSA公私钥对象RSAPublicKey RSAPrivateKey
        RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
        RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
        //公私钥对象存入map中
        Map<String, Object> keyMap = new HashMap<String, Object>(2);
        keyMap.put(PUBLIC_KEY, publicKey);
        keyMap.put(PRIVATE_KEY, privateKey);
        return keyMap;
    }

    public static void main(String[] args) {
        String in=null;
        String date=null;
        String out = "./licence.txt";
        try {            
            for(int i=0;i<args.length;i++){
                switch (args[i]) {
                case "-in":
                    in = args[++i];
                    break;
                case "-date":
                    date = args[++i];
                    break;
                default:
                    System.out.println("输出参数无效！ 应为 -in 输入文件路径");
                    return;
                }
            }
        File file = new File(in);   
        Long filelength = file.length();
        byte[] filecontent = new byte[filelength.intValue()];
        FileInputStream inStram = new FileInputStream(file);
        inStram.read(filecontent);
        inStram.close();
        String fileText = new String(filecontent);
//        System.out.println(fileText);
        fileText = CreateSecrteKey.ecode(fileText+":"+date);
        FileOutputStream outFile = new FileOutputStream(new File(out));
        outFile.write(fileText.getBytes());
        outFile.flush();
        outFile.close();
        System.out.println("licence.txt文件生成成功！");                
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
	   public static String getComputerMsg() {

        // 这个是信息变量
        StringBuffer address = new StringBuffer();
        // 获得系统名称
        String os = System.getProperty("os.name");
        if (os != null && os.startsWith("Windows")) {
            // 抓异常
            try {
                // 定义dos命令
                String command = "cmd.exe /c wmic cpu get ProcessorId";
                // 执行dos命令
                Process p = Runtime.getRuntime().exec(command);
                BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(), "GBK"));
                String line;
                while ((line = br.readLine()) != null) {
                    address.append(line.trim());
                }
                br.close();

                String command2 = "cmd.exe /c ipconfig/all";
                // 执行dos命令
                p = Runtime.getRuntime().exec(command2);
                br = new BufferedReader(new InputStreamReader(p.getInputStream(), "GBK"));
                String line1;
                while ((line1 = br.readLine()) != null) {
                    if (line1.indexOf(":") != -1) {
                        String[] arr = line1.split(":");
                        if (arr[0].indexOf("物理地址") != -1) {
                            address.append(arr[1].trim());
                        }
                    }
                }
                br.close();
                p.destroy();

                return address.toString();
            } catch (IOException e) {
                return null;
            }
        }
        return null;
    }

}
